package com.togo.algorithm.medium.dp;

import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * @Author taiyn
 * @Description Alice 在给 Bob 用手机打字。数字到字母的 对应 如下图所示。
 * <p>
 * <p>
 * <p>
 * 为了 打出 一个字母，Alice 需要 按 对应字母 i 次，i 是该字母在这个按键上所处的位置。
 * <p>
 * 比方说，为了按出字母 's' ，Alice 需要按 '7' 四次。类似的， Alice 需要按 '5' 两次得到字母  'k' 。
 * 注意，数字 '0' 和 '1' 不映射到任何字母，所以 Alice 不 使用它们。
 * 但是，由于传输的错误，Bob 没有收到 Alice 打字的字母信息，反而收到了 按键的字符串信息 。
 * <p>
 * 比方说，Alice 发出的信息为 "bob" ，Bob 将收到字符串 "2266622" 。
 * 给你一个字符串 pressedKeys ，表示 Bob 收到的字符串，请你返回 Alice 总共可能发出多少种文字信息 。
 * <p>
 * 由于答案可能很大，将它对 109 + 7 取余 后返回。
 * <p>
 *  
 * <p>
 * 示例 1：
 * <p>
 * 输入：pressedKeys = "22233"
 * 输出：8
 * 解释：
 * Alice 可能发出的文字信息包括：
 * "aaadd", "abdd", "badd", "cdd", "aaae", "abe", "bae" 和 "ce" 。
 * 由于总共有 8 种可能的信息，所以我们返回 8 。
 * 示例 2：
 * <p>
 * 输入：pressedKeys = "222222222222222222222222222222222222"
 * 输出：82876089
 * 解释：
 * 总共有 2082876103 种 Alice 可能发出的文字信息。
 * 由于我们需要将答案对 109 + 7 取余，所以我们返回 2082876103 % (109 + 7) = 82876089 。
 *  
 * <p>
 * 提示：
 * <p>
 * 1 <= pressedKeys.length <= 105
 * pressedKeys 只包含数字 '2' 到 '9' 。
 * @Date 下午10:06 2022/5/9
 **/
public class No2266 {

    public int countTexts(String pressedKeys) {
        int[] dp = new int[pressedKeys.length() + 1];
        dp[0] = 1;
        for (int i = 0; i < pressedKeys.length(); i++) {
            int x = i - ("79".contains("" + pressedKeys.charAt(i)) ? 4 : 3);
            for (int j = i; j >= 0 && j > x && pressedKeys.charAt(j) == pressedKeys.charAt(i); j--) {
                dp[i + 1] = (dp[i + 1] + dp[j]) % 1000000007;
                System.out.println();
            }
        }
        return dp[pressedKeys.length()];
    }

    public static void main(String[] args) {

//        No2266 no2266 = new No2266();
//
//        String s = "22222";
//        int i = no2266.countTexts(s);
//        System.out.println(i);


        double d = 0.5;
        BigDecimal b = new BigDecimal(d);
        d = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        System.out.println(d);

        double dd = 0.5;
        DecimalFormat df = new DecimalFormat("######0.00");
        String str = df.format(dd);
        System.out.println(str);

        double ddd = 0.5;
        String format = String.format("%.2f", ddd);
        System.out.println(format);
    }
}
